﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class controles_endereco_bairro : System.Web.UI.UserControl
{
    private dbSisInfoDataContext Banco = new dbSisInfoDataContext();
    private ESTADO Estado = new ESTADO();
    private CIDADE Cidade = new CIDADE();
    private BAIRRO Bairro = new BAIRRO();

    string opcao;

    public  bool ShowButtonsInsert
    {
        set { btnAddBairro.Visible = value; btnAddEstado.Visible = value; btnAddCidade.Visible = value; }
        
    }
    /// <summary>
    /// Retorna o idBairro que foi escolhido pelo usuário.
    /// <para>
    /// Caso não tenha sido escolhido, retorna Empty
    /// </para>
    /// </summary>
    public string idBairro
    {

        set
        {  droplistBairro.SelectedValue = value.ToString();}
        get
        { return  droplistBairro.SelectedIndex >0? droplistBairro.SelectedValue:string.Empty; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        { 
            
            var dados = from E in Banco.ESTADOs
                        orderby E.Nome ascending
                        select E;

            PopulaDrop(droplistEstado, "Nome", "idEstado", ">>--- Clique AQUI para ver a lista", dados);  
        }
    }

    protected void btnAddEstado_Click(object sender, EventArgs e)
    {
        
        pnlInserir.Visible = true;
        lbTituloCampo.Text = "Estado:";
        lbTituloCampoDependencia.Text = string.Empty;

        droplistGenerico.Visible = false;
        lbTituloCampo.Visible = false;

        txtNome.Text = string.Empty;
        txtNome.Focus();

    }
    
    protected void btnAddBairro_Click(object sender, EventArgs e)
    {
        pnlInserir.Visible = true;
        lbTituloCampo.Text  = "Bairro:";
        lbTituloCampoDependencia.Text = "Cidade:";

       // Habilitar e popular drop de estados
       droplistGenerico.Visible = true;

       var dados = from d in Banco.CIDADEs
                   orderby d.Nome ascending
                   select d;

       droplistGenerico.DataTextField = "Nome";
       droplistGenerico.DataValueField = "idCidade";
       droplistGenerico.DataSource = dados;
       droplistGenerico.DataBind();

       // Posicionar o drop de estados, n ovalor ja selecionado
       // para estado
       droplistGenerico.SelectedValue = droplistCidades.SelectedValue;

      

    }

    protected void btnAddCidade_Click(object sender, EventArgs e)
    {
        pnlInserir.Visible = true;
        lbTituloCampo.Text = "Cidade:";
        lbTituloCampoDependencia.Text = "Estado:";

        // Habilitar e popular drop de estados
        droplistGenerico.Visible = true;
        
        var dados = from d in Banco.ESTADOs
                    orderby d.Nome ascending
                    select d;

        droplistGenerico.DataTextField = "Nome";
        droplistGenerico.DataValueField = "idEstado";
        droplistGenerico.DataSource = dados;
        droplistGenerico.DataBind();

        // Posicionar o drop de estados, n ovalor ja selecionado
        // para estado
        droplistGenerico.SelectedValue = droplistEstado.SelectedValue;

      
    }
    
    protected void btnIncluir_Click(object sender, EventArgs e)
    {
        switch (lbTituloCampo.Text.Trim())
        {
            case "Estado:":
                {
                    Estado.Nome = txtNome.Text;
                    Banco.ESTADOs.InsertOnSubmit(Estado);                   

                    break; }
            case "Cidade:":
                {
                    Cidade.Nome = txtNome.Text;
                    Cidade.idEstado = Convert.ToInt32(droplistGenerico.SelectedValue);
                    Banco.CIDADEs.InsertOnSubmit(Cidade);

                    
                    break; }

            case "Bairro:":
                {
                    Bairro.Nome = txtNome.Text;
                    Bairro.idCidade = Convert.ToInt32(droplistGenerico.SelectedValue);
                    Banco.BAIRROs.InsertOnSubmit(Bairro);
                    break;
                }

        }

        Banco.SubmitChanges();
        droplistEstado.DataBind();
        droplistCidades.DataBind();
        droplistBairro.DataBind();
        
        // Limpa valores
        txtNome.Text = string.Empty;
        droplistGenerico.DataSource = null;
        droplistGenerico.DataBind();
            
        // desaparecer painel de insercao
        pnlInserir.Visible = false;    

    
    }
    protected void btnCancela_Click(object sender, EventArgs e)
    {
        pnlInserir.Visible = false;

    }
    protected void droplistEstado_Load(object sender, EventArgs e)
    {

       

    }
   
    protected void droplistEstado_SelectedIndexChanged(object sender, EventArgs e)
    {
        var dados = from C in Banco.CIDADEs
                    where C.idEstado == Convert.ToInt32(droplistEstado.SelectedValue)
                    orderby C.Nome ascending
                    select C;

        PopulaDrop(droplistCidades, "Nome", "idCidade", ">>--- Clique AQUI para ver a lista", dados);

        droplistCidades.Enabled = droplistCidades.Items.Count > 1;

        droplistBairro.Items.Clear();
        droplistBairro.Enabled = false;

    }

    protected void droplistCidades_SelectedIndexChanged(object sender, EventArgs e)
    {
       
        var dados = from C in Banco.BAIRROs
                    where C.idBairro == Convert.ToInt32(droplistCidades.SelectedValue)
                    orderby C.Nome ascending
                    select C;

        PopulaDrop(droplistBairro, "Nome", "idBairro", ">>--- Clique AQUI para ver a lista", dados);

        droplistBairro.Enabled = droplistBairro.Items.Count > 1;
    }

    /// <summary>
    /// Popular o componente DropDownList passado
    /// </summary>
    /// <param name="dropdown">Componente que será configurado</param>
    /// <param name="Nome">Nome do campo que será exibido no item da lista</param>
    /// <param name="Value">Nome do campo que será passado ao ser selecionado o item</param>
    /// <param name="DescricaoItem0">Texto que será exibido no primeiro item da lista</param>
    /// <param name="Datasource">Dados que preencherão o componente da lista</param>
    private void PopulaDrop(DropDownList dropdown, string Nome, string Value, string DescricaoItem0, object Datasource )
    {
        dropdown.Items.Clear();

        dropdown.DataTextField = Nome;
        dropdown.DataValueField = Value;

        dropdown.AppendDataBoundItems = true;
        dropdown.Items.Add(new ListItem(DescricaoItem0, "0"));
        dropdown.Items[0].Selected = true;

        dropdown.DataSource = Datasource;
        dropdown.DataBind();
    }

}
